package service

import (
	"gitee.com/ysl729895/go-mall/internal/model"
	"gitee.com/ysl729895/go-mall/internal/repository"
)

// RoleService 角色业务逻辑接口，定义角色相关的增删改查操作
// 便于 controller 层调用，实现解耦
// 包括：创建、更新、删除、查询单个/全部角色
type RoleService interface {
	// CreateRole 创建新角色
	CreateRole(name, description string) error
	// UpdateRole 更新角色信息
	UpdateRole(id uint, name, description string) error
	// DeleteRole 删除角色
	DeleteRole(id uint) error
	// GetRoleByID 根据ID查询角色
	GetRoleByID(id uint) (*model.Role, error)
	// GetAllRoles 查询所有角色
	GetAllRoles() ([]model.Role, error)
}

// roleService 角色业务逻辑实现结构体
// 依赖 RoleRepository

type roleService struct {
	repo repository.RoleRepository
}

// NewRoleService 构造函数，注入 RoleRepository
func NewRoleService(repo repository.RoleRepository) RoleService {
	return &roleService{repo: repo}
}

// CreateRole 创建新角色
func (s *roleService) CreateRole(name, description string) error {
	role := &model.Role{Name: name, Description: description}
	return s.repo.Create(role)
}

// UpdateRole 更新角色信息
func (s *roleService) UpdateRole(id uint, name, description string) error {
	role, err := s.repo.GetByID(id)
	if err != nil {
		return err
	}
	role.Name = name
	role.Description = description
	return s.repo.Update(role)
}

// DeleteRole 删除角色
func (s *roleService) DeleteRole(id uint) error {
	return s.repo.Delete(id)
}

// GetRoleByID 根据ID查询角色
func (s *roleService) GetRoleByID(id uint) (*model.Role, error) {
	return s.repo.GetByID(id)
}

// GetAllRoles 查询所有角色
func (s *roleService) GetAllRoles() ([]model.Role, error) {
	return s.repo.GetAll()
}
